package com.icongyou.enterprise.talent_analysis.service;

import com.icongyou.enterprise.talent_analysis.entity.StudentInsight;

/**
 * AI洞察缓存服务
 * 负责AI洞察报告的缓存管理和异步刷新
 */
public interface AIInsightCacheService {
    
    /**
     * 从缓存获取AI洞察报告
     * 
     * @param studentId 学生ID
     * @param templateId 模板ID (null表示默认模板)
     * @return 缓存的AI洞察报告,不存在返回null
     */
    StudentInsight getFromCache(String studentId, String templateId);
    
    /**
     * 更新缓存中的AI洞察报告
     * 
     * @param studentId 学生ID
     * @param templateId 模板ID (null表示默认模板)
     * @param insight AI洞察报告
     */
    void putToCache(String studentId, String templateId, StudentInsight insight);
    
    /**
     * 异步重新生成并更新缓存
     * 
     * @param studentId 学生ID
     * @param templateId 模板ID (null表示默认模板)
     * @param hrUserId HR用户ID
     */
    void asyncRegenerateInsight(String studentId, String templateId, String hrUserId);
    
    /**
     * 批量异步重新生成(用于模板切换场景)
     * 当HR切换模板时,为所有相关学生重新生成AI洞察
     * 
     * @param studentIds 学生ID列表
     * @param oldTemplateId 旧模板ID
     * @param newTemplateId 新模板ID
     * @param hrUserId HR用户ID
     */
    void batchAsyncRegenerateInsights(
        java.util.List<String> studentIds, 
        String oldTemplateId, 
        String newTemplateId,
        String hrUserId
    );
    
    /**
     * 使指定学生的所有模板缓存失效
     * 当学生数据更新时调用
     * 
     * @param studentId 学生ID
     */
    void invalidateStudentCache(String studentId);
    
    /**
     * 使指定模板的所有学生缓存失效
     * 当模板配置变更时调用
     * 
     * @param templateId 模板ID
     */
    void invalidateTemplateCache(String templateId);
    
    /**
     * 检查缓存是否过期
     * 
     * @param studentId 学生ID
     * @param templateId 模板ID
     * @return true表示已过期或不存在
     */
    boolean isCacheExpired(String studentId, String templateId);
}
